home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
LOGIC Apps
/
Logic-APPLE_II_APPS.iso
/
pc
/
LOGIC Apple II 5.25" Library - DOS Part 3
/
DOS065.dsk
/
FILE CABINET I.bas
< prev
next >
Wrap
BASIC Source File
|
2012-02-16
|
10KB
|
318 lines
1 D$ = "<CTRL-D>": REM CTRL D
2 PRINT D$"NOMON I,C,O"
3 PRINT D$"MAXFILES1"
5 TEXT : HOME
7 GOSUB 30500
10 CLEAR
11 DIM R$(21),AC(21),T(21),TF(21),K(21)
15 D$ = "<CTRL-D>": REM CTRL D
16 R$(0) = "REC#"
20 DB$ = "":F$ = "BASENAME": ONERR GOTO 13240
25 GOSUB 17000
30 GOTO 13000
40 DB$ = BN$:F$ = "HEADER": ONERR GOTO 4000
42 GOSUB 17000
45 NH = NR:NR = 0:MEM = FRE(0)
46 B = INT(MEM/(13 *NH))
47 DIM N$(B,NH)
50 F$ = "INDEX": ONERR GOTO 25000
55 GOSUB 17000
60 GOTO 25000
100 REM *** SORT ***
110 SF = 0
120 FOR J = 1 TO NR -1
125 ON L GOTO 130,135
130 IF N$(J +1,S) <N$(J,S) THEN GOSUB 170
132 GOTO 140
135 IF VAL(N$(J +1,S)) < VAL(N$(J,S)) THEN GOSUB 170
140 NEXT J
145 PRINT "SORTING ";
150 ON SF GOTO 110
154 PRINT
155 PRINT : PRINT "WANT TO SAVE THE SORTED FILE TO DISK--": INPUT "Y/N) ?";L$: IF L$ = "Y" THEN GOSUB 18000
160 GOTO 25000
170 FOR I = 1 TO NH
180 Z$ = N$(J,I):N$(J,I) = N$(J +1,I):N$(J +1,I) = Z$
190 NEXT I:SF = 1
200 RETURN
500 HOME : PRINT "SELECT FROM:": PRINT
510 FOR I = 1 TO NH: PRINT I" "R$(I): NEXT I: PRINT
520 INPUT "ENTER # OF FIELD FOR SORT ";S$:S = VAL(S$): IF S <1 OR S >NH THEN 520
530 PRINT : PRINT "DO YOU WANT TO SORT:": PRINT
540 PRINT "1 ALPHABETICALLY"
550 PRINT "2 NUMERICALLY"
555 PRINT
560 INPUT "WHICH ";L$:L = VAL(L$)
570 GOTO 110
4000 & : REM *** CREATE HEADERFILE ***
4010 NR = 1
4020 HOME : PRINT "ENTER 'RTN' TO EXIT TO MENU"
4025 PRINT
4030 PRINT "ENTER HEADER NUMBER "NR" ";: INPUT "";R$(NR)
4040 IF R$(NR) = "" OR NR >20 THEN 4065
4050 NR = NR +1
4060 GOTO 4030
4065 NR = NR -1
4070 GOSUB 18000: GOTO 45
6000 REM ***ENTER RECORDS***
6010 HOME
6030 PRINT "THERE ARE "NR" RECORDS"
6031 PRINT "IN THE "BN$" FILE"
6033 NR = NR +1
6035 PRINT "YOU ARE ENTERING RECORD # "NR
6040 PRINT
6050 FOR I = 1 TO NH
6060 PRINT R$(I)":";: INPUT "";N$(NR,I)
6070 NEXT I
6090 PRINT
6100 INPUT "MORE (Y/N) ";L$
6110 IF L$ = "Y" THEN 6030
6140 GOSUB 18000
6150 GOTO 25000
7000 REM ***SEARCH/CHANGE***
7005 L = 0
7010 HOME
7020 PRINT "YOU MAY SEARCH BY ANY OF THE FOLLOWING:"
7030 PRINT
7040 FOR I = 0 TO NH
7050 PRINT I" "R$(I)
7060 NEXT I
7062 PRINT : PRINT "OR YOU MAY": PRINT
7065 PRINT I" MAKE CHANGES"
7070 PRINT
7080 INPUT "WHICH ";S$:S = VAL(S$)
7085 IF S <0 OR S >NH +1 THEN 7080
7087 IF S = NH +1 THEN 9000
7090 HOME
7100 PRINT "PLEASE ENTER THE "R$(S): PRINT "YOU WANT TO FIND.......<CTRL-J>": INPUT "";Q$
7110 HOME
7120 FOR J = 1 TO NR
7125 N$(J,0) = STR$(J)
7130 IF LEFT$(N$(J,S), LEN(Q$)) = Q$ THEN GOSUB 10000
7135 IF L +NH >20 THEN GOSUB 7180
7140 NEXT J
7150 PRINT "THAT'S ALL OF THEM. ";
7160 PRINT "NOW YOU MAY:"
7170 PRINT "1 DO MORE SEARCHES"
7171 PRINT "2 MAKE CHANGES"
7172 PRINT "3 RETURN TO THE MAIN MENU"
7173 INPUT "<CTRL-J>WHICH ";S$:S = VAL(S$)
7174 IF S <1 OR S >3 THEN 7173
7175 ON S GOTO 7010,9000,25000
7180 ON PF GOTO 7190,7190: INPUT "<CTRL-J>HIT RETURN TO CONTINUE...";L$
7190 L = 0: HOME : RETURN
9000 REM ***CHANGE DATA***
9005 PRINT "<CTRL-J>ENTER THE NUMBER OF THE RECORD"
9006 INPUT "YOU WANT TO CHANGE ";J$:J = VAL(J$)
9007 HOME : GOSUB 10000
9010 PRINT "<CTRL-J>ENTER THE NUMBER OF THE FIELD YOU WANT": PRINT "TO CHANGE ";
9020 INPUT "";S$:S = VAL(S$)
9022 IF S <1 OR S >NH THEN 9020
9025 PRINT
9030 PRINT "FROM "R$(S)": "N$(J,S)
9040 PRINT
9050 PRINT "TO "R$(S)": ";: INPUT "";N$(J,S)
9060 PRINT
9070 INPUT "<CTRL-J>MORE CHANGES (Y/N) ";L$
9080 IF L$ = "Y" THEN 9000
9090 DB$ = BN$:F$ = "INDEX": GOSUB 18000: GOTO 25000
10000 REM ***PRINT A RECORD***
10003 IF PF >0 THEN GOSUB 31000
10005 PRINT " "R$(0)": ";J
10010 FOR I = 1 TO NH
10020 PRINT I" "R$(I)": "N$(J,I)
10030 NEXT I
10035 PRINT
10036 L = L +NH +2
10037 IF PF >0 THEN CALL 768
10040 RETURN
11000 REM ***DELETE RECORDS***
11010 HOME
11020 INPUT "ENTER RECORD NUMBER YOU WANT DELETED ";DR$:DR = VAL(DR$)
11025 IF DR <1 OR DR >NR THEN 11020
11030 FOR J = DR TO NR -1
11040 FOR I = 1 TO NH
11050 N$(J,I) = N$(J +1,I)
11060 NEXT I
11070 NEXT J
11080 PRINT : PRINT "RECORD NUMBER "DR" DELETED!": PRINT
11090 INPUT "MORE (Y/N) ";L$
11100 IF L$ = "Y" THEN 11020
11110 NR = NR -1:DB$ = BN$:F$ = "INDEX": GOSUB 18000: GOTO 25000
13000 REM *** BASENAMEFILE ROUTINES ***
13110 HOME
13120 PRINT "SELECT FROM:"
13130 PRINT
13140 FOR J = 1 TO NR
13150 PRINT J" "R$(J)
13160 NEXT J
13170 PRINT
13180 PRINT J" CREATE A NEW DATA BASE"
13190 PRINT
13200 INPUT "WHICH ";S$:S = VAL(S$)
13210 IF S <1 OR S >J THEN 13200
13220 DB$ = R$(S):BN<CTRL-K><CTRL-D>R$(S)
13230 IF S < >J THEN 40
13235 PRINT
13240 & : IF J = 0 THEN J = 1
13245 INPUT "ENTER NAME OF NEW DATA BASE ";R$(J)
13250 NR = J: GOSUB 18000
13260 BN$ = R$(J -1): GOTO 40
14000 REM ***REPORT***
14010 HOME
14020 FOR I = 0 TO NH +1:AC(I) = 0:T(I) = 0:TF(I) = 0:K(I) = 0: NEXT I
14025 PRINT "1 CREATE A NEW REPORT": PRINT "2 USE A REPORT FORMAT FROM DISK": PRINT : INPUT "WHICH ";E$:E = VAL(E$)
14027 IF E <1 OR E >2 THEN 14025
14028 ON E GOTO 14030,15000
14030 PRINT : PRINT "SELECT FROM:": PRINT
14040 FOR I = 0 TO NH
14050 PRINT I" "R$(I)
14060 NEXT I
14062 ON E GOTO 14065,14125
14065 PRINT : INPUT "HOW MANY HEADERS ";RH$:RH = VAL(RH$): IF RH <1 OR RH >NH +1 THEN 14065
14067 RF$ = "THIS"
14070 FOR I = 1 TO RH
14080 PRINT "ENTER # OF HEADER YOU WANT IN": PRINT "POSITION #"I" ";: INPUT "";K$:K(I) = VAL(K$)
14085 IF K(I) <0 OR K(I) >NH THEN 14080
14090 PRINT "ENTER TAB FOR "R$(K(I))" ";: INPUT "";T$:T(I) = VAL(T$)
14095 IF T(I) <0 OR T(I) >255 THEN 14090
14100 PRINT "TOTAL ON "R$(K(I))" (Y/N) ";: INPUT L$
14110 IF L$ = "Y" THEN TF(I) = 1
14120 NEXT I
14125 PRINT : PRINT "@ WILL SELECT ALL RECORDS.": PRINT
14130 INPUT "SELECT RECORDS BY WHICH HEADER # ";S$:S = VAL(S$)
14135 PRINT : INPUT "'AND' 2ND HEADER (Y/N) ";L$: IF L$ < >"Y" THEN X$ = "@": GOTO 14150
14140 PRINT : INPUT "ENTER # OF 'AND' HEADER ";X$:X = VAL(X$)
14150 PRINT : PRINT "SELECT RECORDS FOR "R$(S)"= ";: INPUT "";Q$: PRINT
14160 IF L$ = "Y" THEN PRINT "AND "R$(X)"= ";: INPUT "";X$
14200 GOSUB 14500
14210 FOR J = 1 TO NR
14215 N$(J,0) = STR$(J)
14220 IF Q$ = "@" THEN 14224
14221 IF LEFT$(N$(J,S), LEN(Q$)) < >Q$ THEN 14225
14222 IF X$ = "@" THEN 14224
14223 IF LEFT$(N$(J,X), LEN(X$)) < >X$ THEN 14225
14224 GOSUB 14300
14225 IF PF >0 THEN 14230
14226 IF L >18 THEN GOSUB 7180: GOSUB 14500
14230 NEXT J
14240 ON TF(0) GOSUB 14450
14242 IF PF >0 THEN CALL 768
14243 ON E GOTO 14244,14247
14244 PRINT : PRINT "DO YOU WANT TO SAVE THE FORMAT": INPUT "FOR THIS REPORT TO DISK (Y/N) ";L$
14246 IF L$ = "Y" THEN 16000
14247 PRINT : PRINT "MORE REPORTS USING THE "RF$" FORMAT": INPUT "(Y/N) ";L$
14248 IF L$ = "Y" THEN E = 2: FOR I = 0 TO NH +1:AC(I) = 0: NEXT I: GOTO 14030
14250 GOTO 25000
14300 IF PF >0 THEN GOSUB 31000
14305 FOR I = 1 TO RH
14310 POKE 36,T(I): PRINT N$(J,K(I));
14320 ON TF(I) GOSUB 14400
14340 NEXT I
14345 L = L +1
14350 PRINT : IF PF >0 THEN CALL 768
14355 RETURN
14400 AC(I) = AC(I) + VAL(N$(J,K(I)))
14410 TF(0) = 1: RETURN
14450 IF PF >0 THEN GOSUB 31000
14455 FOR I = 1 TO 39 +((2 >1) *38): PRINT "-";: NEXT I: PRINT
14460 FOR I = 1 TO RH
14470 IF AC(I) = 0 THEN 14490
14480 POKE 36,T(I): PRINT AC(I);
14490 NEXT I
14495 PRINT : IF PF >0 THEN CALL 768
14497 RETURN
14500 HOME : IF PF >0 THEN GOSUB 31000
14510 IF PF >0 THEN POKE 36,30: PRINT "<CTRL-A>"DB$"<CTRL-B>": GOTO 14515
14512 HTAB 10: PRINT DB$
14515 IF X$ = "@" THEN 14518
14516 PRINT " AND "R$(X)": "X$: GOTO 14520
14518 PRINT "<CTRL-J>"
14520 FOR I = 1 TO RH
14530 POKE 36,T(I): PRINT R$(K(I));
14540 NEXT I
14550 PRINT : PRINT
14560 L = 4: RETURN
15000 REM ***READ REPORTFORMATFILE***
15010 PRINT : INPUT "ENTER THE REPORT FORMAT NAME ";RF$
15020 PRINT D$"OPEN"RF$" REPORTFORMATFILE"
15030 PRINT D$"READ"RF$" REPORTFORMATFILE"
15040 INPUT RH: FOR I = 1 TO RH: INPUT K(I): INPUT T(I): INPUT TF(I): NEXT I
15060 PRINT D$"CLOSE"RF$" REPORTFORMATFILE"
15070 GOTO 14030
16000 REM ***SAVE REPORTFORMATFILE***
16010 PRINT : INPUT "ENTER THE REPORT FORMAT NAME ";RF$
16020 PRINT D$"OPEN"RF$" REPORTFORMATFILE"
16030 PRINT D$"WRITE"RF$" REPORTFORMATFILE"
16040 PRINT RH: FOR I = 1 TO RH: PRINT K(I): PRINT T(I): PRINT TF(I): NEXT I
16060 PRINT D$"CLOSE"RF$" REPORTFORMATFILE"
16070 GOTO 14247
17000 REM *** READ FILES ***
17005 IF F$ < >"INDEX" THEN FF = 1
17010 PRINT D$"OPEN"DB$" "F$"FILE"
17020 PRINT D$"READ"DB$" "F$"FILE"
17030 INPUT NR
17050 FOR J = 1 TO NR
17055 ON FF GOTO 17090
17060 FOR I = 1 TO NH
17070 INPUT N$(J,I)
17080 NEXT I
17085 IF FF < >1 THEN 17100
17090 INPUT R$(J)
17100 NEXT J
17110 PRINT D$"CLOSE"DB$" "F$"FILE"
17120 FF = 0
17130 RETURN
18000 REM *** SAVE FILES ***
18005 IF F$ < >"INDEX" THEN FF = 1
18010 PRINT D$"OPEN"DB$" "F$"FILE"
18020 PRINT D$"WRITE"DB$" "F$"FILE"
18030 PRINT NR
18050 FOR J = 1 TO NR
18055 ON FF GOTO 18090
18060 FOR I = 1 TO NH
18070 PRINT N$(J,I)
18080 NEXT I
18085 IF FF < >1 THEN 18100
18090 PRINT R$(J)
18100 NEXT J
18110 PRINT D$"CLOSE"DB$" "F$"FILE"
18120 FF = 0
18130 RETURN
25000 REM *** MAIN MENU ***
25010 HOME : ONERR GOTO 30000
25020 PRINT "******* DATA BASE MANAGEMENT I *******"
25022 PRINT : PRINT " APPLE COMPUTER INC"
25025 PRINT
25030 PRINT "CURRENT DATA BASE: "BN$: PRINT
25032 PRINT "CURRENTLY CONTAINS: "NR" RECORDS": PRINT : PRINT "ROOM FOR "B -NR" MORE RECORDS"
25033 PRINT
25035 IF PF > = 1 THEN PRINT "THE PRINTER IS ";: FLASH : PRINT "ON": NORMAL : GOTO 25037
25036 PRINT "THE PRINTER IS OFF"
25037 PRINT
25040 PRINT "1 SELECT DATA BASE"
25050 PRINT "2 SEARCH AND/OR CHANGE DATA"
25060 PRINT "3 ENTER RECORDS"
25070 PRINT "4 DELETE RECORDS"
25075 PRINT "5 REPORT"
25080 PRINT "6 SORT"
25085 PRINT "7 TURN ON PRINTER"
25087 PRINT "8 TURN OFF PRINTER"
25088 PRINT "9 QUIT"
25090 PRINT
25100 INPUT "WHICH ";S$:S = VAL(S$)
25110 IF S <1 OR S >9 THEN 25000
25120 ON S GOTO 10,7000,6000,11000,14000,500,25200,25300,30000
25200 HOME
25210 PRINT D$"BLOAD DRIVER"
25220 PF = 2
25260 GOTO 25000
25300 PF = 0: GOTO 25000
30000 END
30500 REM ***ROUTINE TO CORRECTONERR ROUTINE IN APPLESOFT II-&: MUST PRECEDE EACH STATEMENT AT ONERR GOTO LINE #***
30510 FOR I = 1013 TO 1022: READ PP: POKE I,PP: NEXT I
30515 I = 0
30520 RETURN
30530 DATA 104,168,104,166,223,154,72,152,72,96
31000 CALL 875
31010 RETURN